DevOps 概述
DevOps 是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。DevOps考虑的还不止是软件部署,它是一套针对这几个部门间沟通与协作问题的流程和方法。
在 DevOps 中,需要了解的概念有 CI 和 CD。
CI: Continuous integration,持续集成
CD: Continuous delivery,持续交付
CD:Continuous Deployment,持续部署
持续集成
持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
持续交付
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
持续部署
持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。
Kubernetes
Kubernetes是用于自动部署,扩展和管理容器化应用程序的开源系统。具有以下特点:
Master
在 K8s 中 Master 一般有多台组成,以保证其高可用行,Master 是整个 K8s 集群的核心。在 Master 上提供了 API Server 服务,使用 RESTful 接口形式供外界调用 K8s 服务。还提供了 Scheduler 任务调度服务,用来处理从 API Server 进来的信息,任务调度有筛选,会根据创建信息来匹配最适合部署的 node。Controller-Manager 用来保证 Controller 的可用性,而 Controller 的作用是保证容器中服务是否正常运行的类似于健康检查的服务,Controller 是一个循环(loop)的操作, 以保证服务的健康。在 Master 中还有一个 etcd 它是整个 K8s 的数据库,存储格式为 key = value 形式。
Node
在 Node 中,kubelet 服务来执行具体的操作,当然还有 Docker 等(不一定是 Docker,因为)。在 k8s 中最小的调度单元不在是容器,而是叫做 Pod,Pod 可以想象成豌豆夹,容器是豌豆,它是容器的一层外壳,里面可以有多个容器。但是建议一个 Pod 只有一个容器,如果是关系非常紧密的容器,也可考虑放在同一个 Pod 中。在 K8s 中还有 Label 的概念,同于对 Pod 进行分组,以便快速的操作多个 Pod,管理 Label 的服务叫做,Label Selector。Service 是一组 pod 的服务抽象,相当于一组 pod 的 LB(负载均衡),负责将请求分发给对应的pod。service 会为这个 LB 提供一个 IP,一般称为 cluster IP。 kube-proxy 的作用主要是负责 service 的实现,具体来说,就是实现了内部从 pod 到 service 和外部的从 node port 向 service 的访问。